package com.suning.sawp.intf.model;

import java.io.OutputStream;
import java.util.List;
import java.util.Set;

import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;

import com.suning.sawp.dto.common.QueryClusterInfoList;
import com.suning.sawp.dto.common.QueryClusterList;
import com.suning.sawp.dto.common.QueryResult;
import com.suning.sawp.dto.common.ReturnMsg;
import com.suning.sawp.dto.precharge.CommonRtn;

/**
 * 
 *  样机后台管理接口<br> 
 * 〈功能详细描述〉
 *
 * @author Wuxiao
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface ModelManageService {
    /**
     * 
     * 功能描述: 后台查询样机清单列表<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelBean>> queryModelList(String regionCode, String branchCode, String commCode,
            String storeCode, Integer pageNo, Integer pageSize,String status,String categoryCode,String brandCode);
    
    /**
     * 
     * 功能描述: 后台查询样机异常清单列表<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelExptBean>> queryModelExptList(String regionCode, String branchCode, String storeCode,
            Integer pageNo, Integer pageSize);
    
    /**
     * 
     * 功能描述: 后台查询财务样机异常清单列表<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<SaleModelExptBean>> querySaleModelExptList(String regionCode, String branchCode, String storeCode,Integer pageNo,Integer pageSize,Integer isInStorage);
    
    /**
     * 
     * 功能描述: 后台查询样机任务<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelTaskBean>> queryTaskList(String taskStartTime,String taskEndTime,Set<Integer> taskType,Integer pageNo,Integer pageSize, String taskStatus);
    /**
     * 
     * 功能描述:查询所有品类品牌<br>
     * 〈功能详细描述〉
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<CategoryBean>> queryAllCate();
    /**
     * 
     * 功能描述: 查询品类下品牌列表<br>
     * 〈功能详细描述〉
     *
     * @param categoryCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<ModelCateBrand>> queryBrandCate();
    /**
     * 
     * 功能描述:查询组织列表 <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @param storeType
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<OrgTreeBean>> queryOrgList(String regionCode, String branchCode,String storeCode,Integer storeType,Long taskId);
    /**
     * 
     * 功能描述: 保存样机清单数据<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param commList
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void saveModelList(String storeCode,List<PriceTagDetail> list);
    
    /**
     * 
     * 功能描述: 保存任务<br>
     * 〈功能详细描述〉
     *
     * @param orgList
     * @param brandList
     * @param startTime
     * @param endTime
     * @param storage
     * @param taskType
     * @param validStatus
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<CommonRtn> saveTask(List<String> storeList,List<BrandInfo> brandList,String startTime,String endTime,String storage,Integer taskType,String staffId,Long taskId);
    
    /**
     * 
     * 功能描述: 查询任务详情<br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<TaskDetailBean> queryTaskDetail(Long taskId);
    /**
     * 
     * 功能描述: 启用\禁用任务<br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @param type
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<CommonRtn> validTask(Long taskId,Integer type);
    /**
     * 
     * 功能描述: 删除任务<br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<CommonRtn> deleteTask(Long taskId);
    /**
     * 
     * 功能描述: 查询簇商品列表<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param commCode
     * @param isCluster
     * @param regionCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryClusterList> queryModelClusterList(String commInfo,Integer pageSize,Integer pageNo);
    
    /**
     * 
     * 功能描述: 查询簇商品列表<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param commCode
     * @param isCluster
     * @param regionCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryClusterInfoList> queryModelClusterInfoList(String commInfo,Integer pageSize,Integer pageNo);
    
    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelTaskNoAssignVo>> queryModelTaskNoAssign(String regionCode, String branchCode, String storeCode, int pageSize, int pageNo, Long taskId, String taskStatus, String cateCode);
    
    /**
     * 查询已分配
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @param pageSize
     * @param pageNo
     * @param taskId
     * @param taskStatus
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelTaskHasAssignVo>> queryModelTaskHasAssign(String regionCode,String branchCode,String storeCode,int pageSize, int pageNo, Long taskId, String taskStatus, String cateCode, String brandCode);
    
    
    /**
     * 
     * 功能描述:样机有效性列表<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param brandCode
     * @param categoryCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelEffectiveness>> queryModelEffectList(String regionCode, String branchCode, 
            String storeCode,String brandCode,String categoryCode,String comRangeName, String comGroupName, 
            String commCode,Integer pageNo,Integer pageSize);
    
    /**
     * 
     * 功能描述: 样机有效性列表<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @param brandCode
     * @param categoryCode
     * @param comRangeName
     * @param comGroupName
     * @param commCode
     * @param month 查询月份
     * @param storeType 门店类型 1门店 0服务站
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelEffectiveness>> queryModelEffectListEx(String regionCode, String branchCode, 
            String storeCode,String brandCode,String categoryCode,String comRangeName, String comGroupName, 
            String commCode,String month, String storeType, Integer pageNo,Integer pageSize);
    
    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param clusterId
     * @param type
     * @param COMM_CODE
     * @param branchCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<Integer> deleteModelCluster(Integer clusterId,String commCode,String branchCode);
    /**
     * 
     * 功能描述: 查询簇下的商品列表<br>
     * 〈功能详细描述〉
     *
     * @param clusterId
     * @param branchCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<CommInfoBean>> queryClusterComm(Integer clusterId,String commCode,String branchCode,Integer pageSize,Integer pageNo);
    /**
     * 
     * 功能描述: 查询推荐商品<br>
     * 〈功能详细描述〉
     *
     * @param commCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<ModelCommClusterVo>> queryRecommendComm(String commCode,String branchCode);
    /**
     * 
     * 功能描述:添加簇商品 <br>
     * 〈功能详细描述〉
     *
     * @param mainCommCode
     * @param commCode
     * @param branchCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    @SuppressWarnings("rawtypes")
    ReturnMsg saveClusterComm(String mainCommCode,String commCode,String branchCode,String staffId);
    /**
     * 
     * 功能描述: 导出限制<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param regionCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<Integer> queryExptLimit();
    /**
     * 
     * 功能描述: 导出未分配任务列表<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param storeCode
     * @param regionCode
     * @param index
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Workbook exportUnassignTask(String branchCode,String storeCode,String regionCode, String cateCode, Long taskId,Integer index);
    
    /**
     * 导出已分配任务列表
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @param cateCode
     * @param brandCode
     * @param taskStatus
     * @param index
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Workbook exportHasAssignTask(Long taskId, String regionCode, String branchCode, String storeCode, String cateCode, 
            String brandCode, String taskStatus,Integer index);
    
    /**
     * 功能描述: <br>
     * 样机清单导出
     *
     * @param storeCode
     * @param pageNo
     * @param out
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportExcelModelByStore(String regionCode, String branchCode, String commCode, String storeCode,
            Integer pageNo, OutputStream out);
    
    /**
     * 功能描述: <br>
     * 财务样机清单导出
     *
     * @param storeCode
     * @param pageNo
     * @param out
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportExcelModelExptByStore(String storeCode, Integer pageNo, OutputStream out);
    /**
     * 
     * 功能描述: 导出财务样机异常列表<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param index
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Workbook exportSaleModelExpt(String storeCode,Integer index,Integer isInStorage);
    /**
     * 
     * 功能描述: 样机有效性导出<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param brandCode
     * @param categoryCode
     * @param index
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    @Deprecated
    Workbook exportModelEffect(String regionCode, String branchCode, String brandCode, 
            String categoryCode, String storeCode, String comRangeName, String comGroupName, 
            String commCode,Integer index);
    /**
     * 
     * 功能描述: 导出商品簇列表<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param commInfo
     * @param isCluster
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Workbook exportCommCluster(String branchCode,String commInfo,Integer isCluster,Integer index);
    
    /**
     * 
     * 功能描述:导出完成或抛异常调用 <br>
     * 〈功能详细描述〉
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void endExportExcel();
    
    /**
     * 查询任务下品类品牌信息
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<ModelCateBrand> queryTaskCateBrands(Long taskId);
    
    /**
     * 查询员工指定督导的任务
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param currIndex
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<ModelTaskNoAssignVo>> queryAppointTask(String staffId, int currIndex, int pageSize);
    
    /**
     * 清除指定督导任务
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param taskId
     * @param staffId
     * @param storeCode
     * @param cateCode
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void clearAppointTask(Long taskId, String staffId, String storeCode, String cateCode);

    /**
     * 功能描述: 导入商品簇信息<br>
     * 〈功能详细描述〉
     *
     * @param file
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<String>> batchImportClusterExcel(MultipartFile file);

    /**
     * 
     * 功能描述: 清空商品簇表信息<br>
     * 〈功能详细描述〉
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void clearCluster();

    /**
     * 
     * 功能描述: 是否超过样机清单导出的上限<br>
     * 〈功能详细描述〉
     *
     * @return true 已超过上限，不能导出；false 未超过上限
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean overExportModelTimes();

    /**
     * 
     * 功能描述: 样机清单导出次数+1<br>
     * 〈功能详细描述〉
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void addExportModelTime();
    

    /**
     * 
     * 功能描述: 样机清单生成Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param branchCode
     * @param commCode
     * @param storeCode
     * @param pageNo
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportExcelModelByStoreEx(String staffId, String regionCode, String branchCode, String commCode, String storeCode,
            Integer pageNo,String status,String categoryCode,String brandCode);
    
    /**
     * 
     * 功能描述: 生成商品簇Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param branchCode
     * @param commInfo
     * @param isCluster
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportCommClusterEx(String staffId, String branchCode,String commInfo,Integer isCluster,Integer index);
    
    /**
     * 
     * 功能描述: 生成异常样机清单Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param storeCode
     * @param pageNo
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportExcelModelExptByStoreEx(String staffId, String regionCode, String branchCode, String storeCode,
            Integer pageNo);
    
    /**
     * 
     * 功能描述: 生成已分配任务列表Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param taskId
     * @param regionCode
     * @param branchCode
     * @param storeCode
     * @param cateCode
     * @param brandCode
     * @param taskStatus
     * @param index
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportHasAssignTaskEx(String staffId, Long taskId, String regionCode, String branchCode, String storeCode,
            String cateCode, String brandCode, String taskStatus, Integer index);
    
    /**
     * 
     * 功能描述: 生成样机有效性Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param regionCode
     * @param branchCode
     * @param brandCode
     * @param categoryCode
     * @param storeCode
     * @param comRangeName
     * @param comGroupName
     * @param commCode
     * @param index
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportModelEffectEx(String staffId, String regionCode, String branchCode, String brandCode, String categoryCode,
            String storeCode, String comRangeName, String comGroupName, String commCode, Integer index, String month, String storeType);
    
    void exportExcelModelTask(String staffId,String regionCode,String branchCode,String storeCode, String cateCode, String brandCode, String taskStatus, 
            String assignStatus,Long taskId, Integer index);
    
    void exportExcelModelMonitor(String staffId,String regionCode, String branchCode,Long taskId);
    
    
    /**
     * 
     * 功能描述: 生成财务样机异常Excel文件<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param storeCode
     * @param index
     * @param isInStorage
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportSaleModelExptEx(String staffId, String regionCode, String branchCode, String storeCode,
            Integer index, Integer isInStorage);

    /**
     * 
     * 功能描述: 导出未分配任务列表<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param branchCode
     * @param storeCode
     * @param regionCode
     * @param cateCode
     * @param taskId
     * @param index
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void exportUnassignTaskEx(String staffId, String branchCode,String storeCode,String regionCode, String cateCode, Long taskId,Integer index);

    ReturnMsg<QueryResult<ModelTaskAssignVo>> queryAssignAllList(String regionCode, String branchCode,
            String storeCode, int initPageSize, int initPageNo, Long taskId, String taskStatus, String assignStatus,
            String cateCode, String brandCode);

    ReturnMsg<ModelTaskInfoVo> queryTaskInfoByID( Long taskId);

    ReturnMsg<ModelTaskMonitorVo> queryTaskMonitor(String branchCode, String regionCode, Long taskId, int pageSize, int pageNo);

    ReturnMsg<Integer> queryExptCSVLimit();

    ReturnMsg<List<DownloadModelListBean>> queryDownloadMonths();
    
    ReturnMsg<List<DownloadModelListBean>> queryDownloadUrlList(String month) ;
}
